\chapter{Architecture}

\section{Structure du compilateur}

Voici une architecture brève du compilateur pour mieux comprendre l'interaction entre les différents composant du compilateur.
\newline
\newline
\includegraphics[width=11cm]{architecture_compil.png}

\section{Interfaçage TCL/C}

L'interface TCL/TK met également en place différents mécanismes qui ont été développés pour exploiter les programmes C que composent le projet.

\subsection{Pipe d'écriture et lecture}

Un mécanisme de redirection a été mis en place, afin que les données saisies depuis l'interface TCL puissent être retransmis à l'appel des programmes C et vice versa. Un programme C intitulé $"my_loop"$ est lancé via un pipe, au démarrage de l'interface graphique. Le programme va créer deux fichiers spéciaux, un fichier d'écriture et de lecture, dans lesquels seront écrits et lues les informations utiles au compilateur :
\begin{itemize}
	\item Dans le fichier d'écriture, sont inscrites toutes les données de l'interface TCL (texte saisi depuis la console, points d'arrêts...), mais également d'un programme C (interpreteur PCod...). Quand une donnée est inscrite dans le fichier, celle-ci est retransmise au fichier de lecture.
	\item Les affichages depuis la console de l'interface TCL se font en lisant les données qui ont été transférées sur le fichier de lecture.
\end{itemize}

\subsection{Protocole applicatif}

Le protocole applicatif se caractérise par l'insertion de mot clé qui seront écrit dans le pipe d'écriture, au moment de l'éxécution des différentes fonctionnalités de l'interface. Ces mots clés et les chaines qui peuvent les suivre, sont directement traitées par le programme C. Voici un listing des différents mots clés que l'ont trouve dans l'application et leurs utilités respectives :

\begin{itemize}
\item Du TCL vers le C :
  \begin{itemize}
	  \item inpu : Indique l'insertion d'un texte depuis la console de saisi;
	  \item poar : Envoi à l'interpréteur de la liste des points d'arrêt;
	  \item exec : Commande de lancement et de reprise de l'interprétation;
	  \item next : Commande pas en avant (interpretation d'une ligne pcod);
	  \item quit : Arret de l'interprétation (retour à zéro pour l'interpreteur).
  \end{itemize}

\item Du C vers le TCL :
  \begin{itemize}
	  \item coor : Etat du compteur ordinal (envoyé à chaque changement);
	  \item flag : Etat du drapeau booléen	(envoyé à chaque changement);
	  \item riii : Dernière instruction pcod exécutée (envoyé à chaque changement);
	  \item stac : Etat de la pile (envoyé chaque changement);
	  \item outp : Lors d'un write, ce qui doit être affiché dans la console;
	  \item inpu : Lors d'un read, signal l'attente d'une saisie utilisateur.
  \end{itemize}
\end{itemize}
